import mss
import numpy as np
import cv2
import time
 
def record_screen(output_path="output.avi", fps=20.0, resolution=(1280, 720)):
    # 初始化mss库以捕获屏幕
    with mss.mss() as sct:
        # 定义捕获区域（这里全屏）和输出视频参数
        monitor = {"top": 40, "left": 0, "width": resolution[0], "height": resolution[1]}  # 根据需要调整top和left值以避免任务栏等区域被捕获
        fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 定义编码器类型（例如XVID）
        out = cv2.VideoWriter(output_path, fourcc, fps, resolution)  # 创建VideoWriter对象以写入视频文件
        while True:
            # 获取屏幕截图并转换为OpenCV格式（BGR）
            sct_img = sct.grab(monitor)  # 捕获屏幕区域
            frame = np.array(sct_img)  # 将PIL Image对象转换为numpy数组以便于OpenCV处理
            frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # 由于mss返回的是BGR格式，需要转换为RGB格式以正确显示或保存为视频文件
            out.write(frame)  # 将帧写入视频文件
            cv2.imshow('Screen Recording', frame)  # 显示帧（可选）
            if cv2.waitKey(1) & 0xFF == ord('q'):  # 如果按下'q'键则退出循环（可选）
                break
    out.release()  # 释放VideoWriter对象以保存视频文件并关闭所有OpenCV